\subsection{BatallaDePokemones}
\begin{lstlisting}
Object subclass: #BatallaDePokemones
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'PLP-TP-POO'
\end{lstlisting}

\subsubsection{Mensajes de Clase}
\textbf{donde:} \textit{unPokemon} \textbf{atacaA:} \textit{otroPokemon} \textbf{con:} \textit{unPoder} \textbf{usando:} \textit{unTipo}
\begin{lstlisting}
	|clase|
	
	clase := self subclasses 
		detect: [:unaClase | 
			unaClase esPara: unPokemon contra: otroPokemon ] 
		ifNone: [self error: 'Mal ! No hay una Batalla !!'].
					
	^clase new 
		inicializarDonde: unPokemon atacaA: otroPokemon con: unPoder usando: unTipo
\end{lstlisting}

\subsubsection{Mensajes de Instancia}
\textbf{inicializarDonde:} \textit{unPokemon} \textbf{atacaA:} \textit{otroPokemon} \textbf{con:} \textit{unPoder} \textbf{usando:} \textit{unTipo}
\begin{lstlisting}
	self subclassResponsibility 
\end{lstlisting}

\bigskip

\textbf{pelear}
\begin{lstlisting}
	self subclassResponsibility 
\end{lstlisting}


\subsection{BatallaDePokemonesNormal}
\begin{lstlisting}
BatallaDePokemones subclass: #BatallaDePokemonesNormal
	instanceVariableNames: 'atacante defensor poder tipoAtaque'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'PLP-TP-POO'
\end{lstlisting}

\subsubsection{Mensajes de Clase}
\textbf{esPara:} \textit{unPokemon} \textbf{contra:} \textit{otroPokemon}
\begin{lstlisting}
	^unPokemon estaDesmayado not and: [otroPokemon estaDesmayado not]
\end{lstlisting}

\subsubsection{Mensajes de Instancia}
\textbf{danioDeAtaque}
\begin{lstlisting}
	^ (FormulaDeDanioDeAtaque
		para: atacante nivel
		usando: atacante ataque
		con: poder
		contra: defensor defensa
		teniendoEnCuenta: 
			(MultiplicadorPorTipo 
				atacando: atacante 
				a: defensor 
				con: tipoAtaque) value)
				 value
\end{lstlisting}

\bigskip

\textbf{inicializarDonde:} \textit{unPokemon} \textbf{atacaA:} \textit{otroPokemon} \textbf{con:} \textit{unPoder} \textbf{usando:} \textit{unTipo}
\begin{lstlisting}
	atacante := unPokemon.
	defensor := otroPokemon.
	poder := unPoder.
	tipoAtaque := unTipo 
\end{lstlisting}

\bigskip

\textbf{pelear}
\begin{lstlisting}
	| danio |

	danio := self danioDeAtaque.

	defensor herir: danio.

	defensor estaDesmayado
		ifTrue: [ atacante subirDeNivel ]
\end{lstlisting}

\subsection{BatallaDePokemonesNula}
\begin{lstlisting}
BatallaDePokemones subclass: #BatallaDePokemonesNula
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'PLP-TP-POO'
\end{lstlisting}

\subsubsection{Mensajes de Clase}
\textbf{esPara:} \textit{unPokemon} \textbf{contra:} \textit{otroPokemon}
\begin{lstlisting}
	^unPokemon estaDesmayado or: [otroPokemon estaDesmayado ]
\end{lstlisting}

\subsubsection{Mensajes de Instancia}
\textbf{inicializarDonde:} \textit{unPokemon} \textbf{atacaA:} \textit{otroPokemon} \textbf{con:} \textit{unPoder} \textbf{usando:} \textit{unTipo}

\bigskip

\textbf{pelear}
\begin{lstlisting}
	InvalidAtackException 
		signalDescription: 'Un Pokemon Desmayado no puede Atacar ni ser Atacado.'
\end{lstlisting}





